RFC 1423
PEM
インターネット電子メールのプライバシー強化:
パートIII:アルゴリズム、モード、識別子
doi:10.17487/RFC1423
仮
1. メッセージ暗号化アルゴリズム Message Encryption Algorithms
このセクションでは、メッセージ テキストの暗号化に使用する代替メッセージ暗号化アルゴリズムとモード、および ENCRYPTED PEM メッセージで非対称キー管理が採用されている場合はメッセージ署名の暗号化に使用する代替メッセージ暗号化アルゴリズムとモードについて説明します。文字列識別子が割り当てられ、メッセージ暗号化アルゴリズムに必要なパラメータは、カプセル化された「DEK-Info:」ヘッダー フィールドに組み込むために定義されます。
このカテゴリで現在定義されている代替アルゴリズムは 1 つだけです。
1.1 CBC モードの DES (DES-CBC)
メッセージ テキストと、必要に応じてメッセージ署名は、暗号ブロック チェーン (CBC) 動作モードでデータ暗号化標準 (DES) アルゴリズムを使用して暗号化されます。DES アルゴリズムは FIPS PUB 46-1 1 で定義されており、ANSI X3.92-1981 2 で提供されるデータ暗号化アルゴリズム (DEA) と同等です。DES の CBC 動作モードは FIPS PUB 81 3 で定義されており、ANSI X3.106 4 および ISO IS 8372 5 で提供されるものと同等です。カプセル化された PEM ヘッダー フィールド内の文字列 "DES-CBC" は、このアルゴリズム/モードの組み合わせの使用を示します。
DES CBC 暗号化プロセスへの入力は、次の方法で 8 オクテットの倍数にパディングされます。n は入力のオクテット単位の長さです。メッセージの末尾に 8-(n mod 8) オクテットを追加して入力を埋め込みます。各オクテットの値は、追加されるオクテットの数である 8-(n mod 8) です。16 進数で、可能な埋め込みは、01、0202、030303、04040404、0505050505、060606060606、07070707070707、および 0808080808080808 です。すべての入力は、長さが 8 オクテットの倍数になるように 1 ~ 8 オクテットで埋め込まれます。埋め込みは、復号化後に明確に削除できます。
DES CBC 暗号化プロセスには、64 ビットの暗号化キーが必要です。暗号化された PEM メッセージごとに、新しい疑似ランダム キーが生成されます。64 ビットのうち、56 ビットは DES CBC プロセスによって直接使用され、8 ビットは奇数パリティ ビットです。1 つのパリティ ビットは各オクテットの右端のビットを占めます。対称キー管理が採用されている場合、奇数パリティ ビットの設定とチェックが推奨されます。これは、これらのビットによって、対称キー管理アルゴリズム (DES ECB など) で暗号化された DES キーの復号化でエラーが検出される可能性があるためです。非対称キー管理が採用されている場合、奇数パリティ ビットの設定が推奨されますが、相互運用性を容易にするため、また、DES キーの復号化でエラーが他の手段 (PKCS #1 暗号化ブロックの形式が正しくないなど) で検出される可能性があるため、奇数パリティ ビットのチェックは推奨されません。いずれの場合も、DES キーの暗号化形式は、8 つのパリティ ビットを含むキーの 64 ビットすべてを保持しますが、これらのビットには意味がない場合があります。
DES CBC 暗号化プロセスでは、64 ビットの初期化ベクトル (IV) も必要です。新しい疑似ランダム IV は、暗号化された PEM メッセージごとに生成されます。7 のセクション 4.3.1 では、個々の DES キーが個々のメッセージに対して生成されるという事実を考慮しても、この要件の根拠が示されています。IV は、カプセル化された PEM ヘッダー フィールド内のメッセージとともに送信されます。
このアルゴリズム/モードの組み合わせがメッセージ テキストの暗号化に使用される場合、「DEK-Info:」ヘッダー フィールドには、正確に 2 つの引数が含まれます。最初の引数は、上で定義した文字列を使用して DES CBC アルゴリズム/モードを識別します。2 番目の引数には、16 桁の ASCII 16 進数の連続した文字列として表される IV が含まれます。
このアルゴリズム/モードの組み合わせで対称キー管理が採用されている場合、対称的に暗号化された DES キーは、「Key-Info:」ヘッダー フィールドの 3 番目の引数で、連続する 16 桁の ASCII 16 進数文字列 (64 ビット キーに対応) として表されます。
別の暗号化プロセス (RSAEncryption など) にデータ値として入力される DES キーのオクテットの順序に関する潜在的な曖昧さを回避するために、次のことが当てはまります。キーの最初の (または、キーの「印刷」表現で考えると、最も左に表示される) オクテット (このドキュメントの説明では、データ値は「印刷」表現で正規化されています。オクテット ストリームの場合、「最初の」オクテットは「左側」に表示され、「最後の」オクテットは「右側」に表示されます) (つまり、FIPS PUB 46-1 のビット 1 ~ 8) は、データ値として考えた場合、数値の重みが 2**56 になります。最後の (または、最も右に表示される) オクテット (つまり、FIPS PUB 46-1 のビット 57 ~ 64) は、数値の重みが 2**0 になります。
2. メッセージ整合性チェック アルゴリズム Message Integrity Check Algorithm
このセクションでは、PEM メッセージのメッセージ整合性チェック (MIC) 値を計算するために使用される代替アルゴリズムについて説明します。 文字列識別子と ASN.1 オブジェクト識別子は、カプセル化された「MIC-Info:」および「Key-Info:」ヘッダー フィールドに組み込むために割り当てられ、採用されている MIC アルゴリズムの選択を示します。
準拠した PEM 実装は、ここで定義されているすべての代替 MIC アルゴリズムを受信メッセージで処理できる必要があります。 送信メッセージでどの代替アルゴリズムを採用するかは、送信者のオプションです。
2.1 RSA-MD2 メッセージダイジェストアルゴリズム
RSA-MD2 メッセージダイジェストは、RFC 1319 9 で定義されたアルゴリズムを用いて計算されます。(RFC 1319 に誤りが見つかりました。セクション 3.2 の本文中の「Set C[j] to S[c xor L]」という記述は、「Set C[j] to S[c xor L] xor C[j]」と正しくは「Set C[j] to S[c xor L] xor C[j]」です。RFC 1319 の付録にある C ソースコードは正しいことに注意してください。)カプセル化された PEM ヘッダーフィールド内の文字列「RSA-MD2」は、このアルゴリズムが使用されていることを示します。また、RFC 1319 で定義されているように、ASN.1 オブジェクト識別子
code:ASN.1 Object identifier
md2 OBJECT IDENTIFIER ::= {
iso(1) member-body(2) US(840) rsadsi(113549)
digestAlgorithm(2) 2
}
はこのアルゴリズムを識別します。このオブジェクト識別子が ASN.1 型の AlgorithmIdentifier と共に使用される場合、その型のパラメータコンポーネントは ASN.1 型の NULL になります。
RSA-MD2 メッセージダイジェストアルゴリズムは、任意の長さのメッセージを入力として受け取り、16オクテットの値を出力として生成します。対称鍵管理が採用されている場合、RSA-MD2 MIC は、MIC を 8 オクテットの 2 つの部分に分割し、各部分を独立に暗号化して結果を連結することによって暗号化されます。
このMICアルゴリズムで対称鍵管理が採用されている場合、対称的に暗号化されたMD2メッセージダイジェストは、「Key-Info:」ヘッダーフィールドの4番目の引数において、32桁のASCII16進数からなる連続した文字列(128ビットのMD2メッセージダイジェストに相当)として表現されます。
他の暗号化プロセス(RSAEncryptionなど)にデータ値として入力されるMD2メッセージダイジェストのオクテットの順序に関する曖昧さを回避するため、以下の規則が適用されます。ダイジェストの最初のオクテット(ダイジェストの「印刷」表現で考えると、最も左に表示されるオクテット)(つまり、RFC 1319で規定されているダイジェスト0)は、RSAデータ値として考えると、数値的な重みが2120になります。最後の(または表示される右端の)オクテット(つまり、RFC 1319で規定されているダイジェスト15)の数値の重みは20です。
2.2 RSA-MD5 メッセージダイジェストアルゴリズム
RSA-MD5 メッセージダイジェストは、RFC 1321 10 で定義されたアルゴリズムを用いて計算されます。カプセル化されたPEMヘッダーフィールド内の文字列「RSA-MD5」は、このアルゴリズムが使用されていることを示します。また、RFC 1321 で定義されているように、オブジェクト識別子
code:object identifier
md5 OBJECT IDENTIFIER ::= {
iso(1) member-body(2) US(840) rsadsi(113549)
digestAlgorithm(2) 5
}
はこのアルゴリズムを識別します。このオブジェクト識別子がASN.1型のAlgorithmIdentifierと共に使用される場合、その型のパラメータ要素はASN.1型のNULLになります。
RSA-MD5 メッセージダイジェストアルゴリズムは、任意の長さのメッセージを入力として受け取り、16オクテットの値を出力として生成します。対称鍵管理が用いられる場合、RSA-MD5 MIC は、MIC を 8 オクテットの 2 つの部分に分割し、それぞれを独立に暗号化し、その結果を連結することによって暗号化されます。
この MIC アルゴリズムで対称鍵管理が用いられる場合、対称的に暗号化された MD5 メッセージダイジェストは、「Key-Info:」ヘッダーフィールドの 4 番目の引数において、32 桁の ASCII 16 進数の連続した文字列(128 ビットの MD5 メッセージダイジェストに相当)として表されます。
RSA 暗号化プロセスに RSA データ値として入力される MD5 メッセージダイジェストのオクテットの順序に関する潜在的な曖昧さを回避するため、以下の規則が成り立ちます。ダイジェストの最初のオクテット(ダイジェストの「印刷」表現で考えると、最も左に表示されるオクテット)(つまり、RFC 1321で規定されているAの下位オクテット)は、RSAデータ値として考えると、数値重み2120を持ちます。最後のオクテット(つまり、RFC 1321で規定されているDの上位オクテット)の数値重みは20です。
3. 対称キー管理アルゴリズム Symmetric Key Management Algorithms
このセクションでは、対称キー管理が採用されている場合に、データ暗号化キー (DEK) とメッセージ整合性チェック (MIC) 値を暗号化するために使用される代替アルゴリズムとモードについて説明します。 採用されているアルゴリズムの選択を示すために、カプセル化された「Key-Info:」ヘッダー フィールドに組み込むための文字列識別子が割り当てられます。
このカテゴリで現在定義されているすべての代替は、他のアルゴリズムではなく、DES アルゴリズムのさまざまな使用モードに対応しています。
対称キー管理が採用されている場合、対称的に暗号化された DEK と MIC は、「Key-Info:」ヘッダー フィールドの 3 番目と 4 番目の引数でそれぞれ伝送され、連続する ASCII 16 進数字の文字列として表されます。 次の対称暗号化アルゴリズムの使用方法と対称的に暗号化された DEK と MIC の長さは、基礎となる DEK と MIC の長さに応じて異なる場合があります。セクション 1「メッセージ暗号化アルゴリズム」およびセクション 2「メッセージ整合性チェックアルゴリズム」では、DEK または MIC のサイズが対称暗号化アルゴリズムの入力ブロック サイズと等しくない場合に、DEK および MIC をそれぞれ対称的に暗号化する適切な方法について説明しています。また、これらのセクションでは、対称的に暗号化された DEK および MIC の適切な形式と長さについても説明しています。
3.1 ECBモードのDES(DES-ECB)
対称鍵管理が用いられる場合、DEKおよびMIC暗号化には、電子コードブック(ECB)モード13のDESアルゴリズムが使用されます。
カプセル化されたPEMヘッダーフィールド内の文字列「DES-ECB」は、このアルゴリズム/モードの組み合わせが使用されていることを示します。
対称鍵管理をサポートする準拠PEM実装は、このアルゴリズム/モードの組み合わせをサポートする必要があります。
3.2 EDEモードのDES (DES-EDE)
ANSI X9.17 6 で定義されている64ビット鍵ペアによる暗号化および復号化の暗号化-復号-暗号化 (EDE) 多重暗号化モードのDESアルゴリズムは、対称鍵管理が採用されている場合、DEKおよびMIC暗号化に使用できます。カプセル化されたPEMヘッダーフィールド内の文字列「DES-EDE」は、このアルゴリズム/モードの組み合わせが使用されていることを示します。
対称鍵管理をサポートする準拠PEM実装は、オプションでこのアルゴリズム/モードの組み合わせをサポートできます。
4. 非対称鍵管理アルゴリズム
このセクションでは、代替非対称鍵と、それらの鍵を使用する代替非対称鍵管理アルゴリズム(DEKおよびMICの暗号化に使用される非対称暗号化アルゴリズム、および証明書および証明書失効リスト(CRL)の署名に使用される非対称署名アルゴリズム)について説明します。
4.1 非対称鍵
このセクションでは、後述する非対称暗号化アルゴリズムおよび署名アルゴリズムで使用される非対称鍵について説明します。ASN.1オブジェクト識別子は、公開鍵証明書に組み込む際に、付随する公開鍵が使用されるアルゴリズムを識別するために使用されます。
4.1.1 RSA鍵
RSA非対称鍵ペアは、対応する公開鍵と秘密鍵で構成されます。
RSA公開鍵は、暗号化指数eと算術係数nで構成されます。これらはどちらも公開鍵証明書で保持される公開値です。eの値については、X.509の附属書Cでは、フェルマー数F4(10進数で65537、または1+2**16)を「伝送容量と変換の複雑さを削減するために環境全体に共通の値」として使用することを推奨しています。つまり、この値は3オクテットで伝送でき、べき乗演算には最大17回の乗算が必要です。代替として、eの値として数値3を使用することもできます。この場合、伝送に必要なオクテット数はさらに少なくなり、べき乗演算はさらに高速になります。PEMの目的では、eの値はF4または数値3のいずれかとなります。証明書の迅速な検証を可能にするため、e の値には 3 を使用することが推奨されます。
RSA 秘密鍵は、秘密に保持されるべき復号指数 d と算術係数 n で構成されます。効率的な秘密鍵操作を容易にするために、他の値を秘密鍵と共に保存することができます(PKCS #1 11 を参照)。
PEM の目的では、係数 n のサイズは 508 ビットから 1024 ビットまで変化します。
RSA 公開鍵を識別するために、2 つの ASN.1 オブジェクト識別子が定義されています。X.509 8 の Annex H では、オブジェクト識別子
code:object identifier
rsa OBJECT IDENTIFIER ::= {
joint-iso-ccitt(2) ds(5) algorithm(8)
encryptionAlgorithm(1) 1
}
が RSA 公開鍵を識別するために定義されています。このオブジェクト識別子と組み合わせて使用​​するために、公開鍵の係数の長さ(ビット単位)を表す単一のパラメータ KeySize が定義されています。このオブジェクト識別子を ASN.1 型の AlgorithmIdentifier と組み合わせて使用​​する場合、その型のパラメータ要素は係数のビット数であり、ASN.1 で INTEGER としてエンコードされます。
また、PKCS #1 11 では、ASN.1 オブジェクト識別子
code:object identifier
rsaEncryption OBJECT IDENTIFIER ::= {
iso(1) member-body(2) US(840) rsadsi(113549) pkcs(1)
pkcs-1(1) 1
}
は、RSA 公開鍵と RSAEncryption プロセスの両方を識別するために定義されています。このオブジェクト識別子と組み合わせて使用​​されるパラメータは定義されていないため、ASN.1 型の AlgorithmIdentifier と組み合わせて使用​​する場合、その型のパラメータ要素は ASN.1 型の NULL となります。
準拠PEM実装は、オプションで、(SubjectPublicKeyInformationコンポーネント内の)同梱のRSA公開鍵を「rsa」または「rsaEncryption」オブジェクト識別子で識別するRSA公開鍵証明書を生成することができます。「rsa」オブジェクト識別子の使用は、鍵の使用方法を示すことなく、ある意味で鍵の識別においてより汎用的であるため、推奨されます。ただし、相互運用性を促進するため、準拠PEM実装は、同梱のRSA公開鍵を「rsa」または「rsaEncryption」オブジェクト識別子で識別するRSA公開鍵証明書を受け入れるものとします。いずれの場合も、「rsa」または「rsaEncryption」オブジェクト識別子を持つRSA公開鍵証明書で識別されるRSA公開鍵は、以下に定義される非対称暗号化アルゴリズムおよび非対称署名アルゴリズムの手順に従って使用されるものとします。
4.2 非対称暗号化アルゴリズム
このセクションでは、非対称鍵管理がDEKおよびMICの暗号化に用いられる代替アルゴリズムについて規定する。
選択されたアルゴリズムを示すために、「MIC-Info:」および「Key-Info:」ヘッダーフィールドに組み込むための文字列識別子が割り当てられている。
現在、このカテゴリでは1つの代替アルゴリズムのみが定義されている。
4.2.1 RSAEncryption
PKCS #1 11 で定義されているRSAEncryption公開鍵暗号化アルゴリズムは、非対称鍵管理が用いられる場合のDEKおよびMIC暗号化に使用されます。「MIC-Info:」または「Key-Info:」ヘッダーフィールド内の文字列「RSA」は、このアルゴリズムが使用されていることを示します。
非対称鍵管理をサポートするすべてのPEM実装は、このアルゴリズムをサポートする必要があります。
PKCS #1 に規定されているように、RSAEncryptionプロセスにデータ値として入力されるすべての量は、暗号化プロセスの前に、適切に調整され、係数の長さに合わせてパディングされる必要があります。一般に、RSAEncryptionの入力値は、先頭のNULLオクテット、ブロックタイプBT、パディング文字列PS、NULLオクテット、およびデータ量Dを連結することによって形成されます。つまり、
RSA入力値 = 0x00 || BT || PS || 0x00 || D.
RSAEncryption用のDEKを作成するために、PKCS #1の「ブロックタイプ02」暗号化ブロックフォーマット方式が採用されています。ブロックタイプBTは値0x02を含む単一のオクテットであり、パディング文字列PSは1つ以上のオクテット(RSA入力値全体の長さが係数の長さと等しくなるのに十分なオクテット)で、各オクテットには疑似乱数で生成された非ゼロ値が含まれます。複数の受信者を持つメッセージの場合は、受信者ごとに異なる疑似乱数パディング文字列を使用する必要があります。データ量DはDEK自体であり、RSA入力内で右寄せされ、DEKの最後のオクテット(「印刷」表現で考えると、表示される最右端のオクテット)がRSA入力の最も右、つまり最下位のオクテットと揃うようにします。左に進むと、DEK の残りの各オクテット(最初の(または一番左に表示されている)オクテットまで)が、それぞれ RSA 入力の次のより重要なオクテットに揃えられます。
RSAEncryption 用の MIC を作成するために、PKCS #1 「ブロックタイプ 01」暗号化ブロックフォーマット方式が採用されています。ブロックタイプ BT は値 0x01 を含む単一のオクテットであり、パディング文字列 PS は値 0xFF を含む1つ以上のオクテット(RSA 入力値全体の長さがモジュラスの長さと等しくなるのに十分なオクテット)です。データ量 D は、MIC と MIC アルゴリズム識別子で構成され、これらは以下のシーケンスとして ASN.1 でエンコードされます。
code:sequence
SEQUENCE {
digestAlgorithm AlgorithmIdentifier,
digest OCTET STRING
}
ASN.1 型の AlgorithmIdentifier は、X.509 で以下のように定義されています。
code:AlgorithmIdentifier
AlgorithmIdentifier ::= SEQUENCE {
algorithm OBJECT IDENTIFIER,
parameters ANY DEFINED BY algorithm OPTIONAL
}
RSA入力ブロックは、RSAアルゴリズムを用いて暗号化されます。この暗号化では、最初の(または左端の)オクテットを最上位オクテット、最後の(または右端の)オクテットを最下位オクテットとします。結果として得られるRSA出力ブロックも同様の方法で解釈されます。
RSAEncryptionを用いてDEKを暗号化する場合、「MIC-Info:」ヘッダーフィールドの2番目の引数(非対称暗号化DEK)は、RFC 1421 12 のセクション4.3.2.4で定義されている印刷可能な符号化技術を用いて表現されます。
RSAEncryption を使用して MIC に署名する場合、「MIC-Info:」ヘッダー フィールドの 3 番目の引数 (非対称署名された MIC) は、RFC 1421 のセクション 4.3.2.4 で定義されている印刷可能なエンコード手法を使用して表されます。
4.3 非対称署名アルゴリズム
このセクションでは、X.509の附属書Gで定義されているSIGNEDマクロに従って、証明書および証明書失効リスト(CRL)に非対称署名するために使用する代替アルゴリズムを示します。証明書およびCRLに組み込むためのASN.1オブジェクト識別子は、採用されたアルゴリズムの選択を示すために識別されます。
現在、このカテゴリでは1つの代替アルゴリズムのみが定義されています。
4.3.1 md2WithRSAEncryption
md2WithRSAEncryption署名アルゴリズムは、証明書およびCRLの署名に使用されます。このアルゴリズムはPKCS #1 11 で定義されています。このアルゴリズムは、本稿2.2節で説明するRSA-MD2メッセージダイジェストアルゴリズムと、本稿4.2.1節で説明するRSAEncryption非対称暗号化アルゴリズムを組み合わせたものです。PKCS #1 で定義されているように、ASN.1オブジェクト識別子
code:object identifier
md2WithRSAEncryption OBJECT IDENTIFIER ::= {
iso(1) member-body(2) US(840) rsadsi(113549) pkcs(1)
pkcs-1(1) 2
}
がこのアルゴリズムを識別します。このオブジェクト識別子をASN.1型AlgorithmIdentifierと共に使用する場合、その型のパラメータコンポーネントはASN.1型NULLとなります。
X.509では、SIGNEDマクロの定義、特に証明書またはCRLにおける署名の表現に関して曖昧な点があります。PEMに選択された解釈では、署名対象のデータ(この場合はMD2メッセージダイジェスト)はまずASN.1エンコードされてOCTET STRING(オクテット文字列)となり、その結果が暗号化(この場合はRSAEncryptionを使用)されて署名された量が生成され、その後ASN.1エンコードされてBIT STRING(ビット文字列)となります。
5. 記述文法 Descriptive Grammar
code:BNF
; RFC 822 記法を用いた PEM BNF 表現の補遺。
; 公式 PEM 暗号化アルゴリズム、モード、識別子、および形式の仕様を提供します。
; RFC 1421 から <hexchar> と <encbin> をインポートします。
<dekalgid> ::= "DES-CBC"
<ikalgid> ::= "DES-EDE" / "DES-ECB" / "RSA"
<sigalgid> ::= "RSA"
<micalgid> ::= "RSA-MD2" / "RSA-MD5"
<dekparameters> ::= <DESCBCparameters>
<DESCBCparameters> ::= <IV>
<IV> ::= <hexchar16>
<symencdek> ::= <DESECBencDESCBC> / <DESEDEencDESCBC>
<DESECBencDESCBC> ::= <hexchar16>
<DESEDEencDESCBC> ::= <hexchar16>
<symencmic> ::= <DESECBencRSAMD2> / <DESECBencRSAMD5>
<DESECBencRSAMD2> ::= 2*2<hexchar16>
<DESECBencRSAMD5> ::= 2*2<hexchar16>
<asymsignmic> ::= <RSAsignmic>
<RSAsignmic> ::= <encbin>
<asymencdek> ::= <RSAencdek>
<RSAencdek> ::= <encbin>
<hexchar16> ::= 16*16<hexchar>
参照
特許
(略)
RFC 1170 Public Key Standards and Licenses